<!--
 * @Description:
 * @notes: 
 * @Author: 台火山
 * @Date: 2024-04-21 17:44:52
 * @LastEditors: 台火山
 * @LastEditTime: 2024-04-24 00:15:22
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello react</title>
</head>

<body>
    <!-- 准备号一个“容器” -->
    <div id="test"></div>
    <!-- 引入 react 核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入 react-dom,用于支持react操作 dom -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入 babel，用于将 jsx 转化为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
        // 1.创建组件
        class Weather extends React.Component {

            // 构造器调用几次？ ----  1次
            constructor(props) {
                super(props);
                this.state = {
                    isHot: true,
                    wind: '微风'
                }
                // 解决 changeWeather 中this的指向问题
                this.changeWeather = this.changeWeather.bind(this);
            }
            
            // render 调用几次？ ----- 1+n次  n 是状态更新的次数
            render() {
                console.log('==this=', this);
                const { isHot, wind } = this.state;
                return <h1 onClick={this.changeWeather}>
                    今天天气很{isHot ? '炎热' : '凉爽'}，
                    {wind}
                </h1>
            }

            // changeWeather 调用几次？ ----- 点几次调用几次
            changeWeather() {
                // changeWeather放在哪里？ ---- Weather 的原型对象上，供实例使用
                // 由于changeWeather 是作为 onClick 的回调，所以不是通过实例调用的，是直接调用
                // 类中的方法默认开启了局部严格模式，所以 changeWeather 中的this 为 undefined
                // console.log('此处修改isHot的值');

                // 获取原来的 isHot 值
                const isHot = this.state.isHot;
                // 严重注意：状态(state)不可直接更改，下面这行就是直接更改！！！！
                // this.sate.isHot = !isHot; // 错误写法

                // 严重注意：状态必须通过 setState 进行更新 ,且更新是一种合并，不是替换
                this.setState({
                    isHot: !isHot
                })
            }

        }
        // 2.渲染
        ReactDOM.render(<Weather />, document.getElementById('test'));
        const title = document.getElementById('title');
        // 避免
        // 方法1
        // title.addEventListener('clicl', () => {
        //     console.log('标题被点击了');
        // })
        // 方法2
        // title.onclick = () => {
        //     console.log('标题被点击了');
        // }

    </script>
</body>

</html>